home *** CD-ROM | disk | FTP | other *** search
/ SGI Hot Mix 17 / Hot Mix 17.iso / HM17_SGI / research / lib / field_alloc.pro < prev    next >
Text File  |  1997-07-08  |  12KB  |  379 lines

  1. ;
  2. ; $Id: field_alloc.pro,v 1.11 1997/03/18 00:08:03 lubos Exp $
  3. ;
  4. ;  WidField
  5. ;   Widget Field class library
  6. ;
  7. ; Copyright (c) 1993-1997, Research Systems, Inc.  All rights reserved.
  8. ;   Unauthorized reproduction prohibited.
  9. ;
  10. ; MODIFICATION HISTORY
  11. ;       Written by:     Joshua Goldstein,       12/93
  12. ;
  13. ;
  14.  
  15.  
  16. ;
  17. ;  FIELD_Icon
  18. ;       Return the cw_field toolbar icon
  19. ;
  20. FUNCTION FIELD_Icon
  21.   RETURN, [ $
  22.     [ 0b, 0b, 0b, 0b ], $
  23.     [ 0b, 0b, 0b, 0b ], $
  24.     [ 0b, 0b, 0b, 0b ], $
  25.     [ 254b, 255b, 255b, 127b ], $
  26.     [ 254b, 255b, 255b, 127b ], $
  27.     [ 6b, 0b, 0b, 96b ], $
  28.     [ 6b, 0b, 0b, 110b ], $
  29.     [ 6b, 0b, 0b, 100b ], $
  30.     [ 6b, 3b, 8b, 100b ], $
  31.     [ 6b, 3b, 8b, 100b ], $
  32.     [ 6b, 3b, 8b, 100b ], $
  33.     [ 134b, 6b, 8b, 100b ], $
  34.     [ 134b, 6b, 8b, 100b ], $
  35.     [ 134b, 134b, 9b, 100b ], $
  36.     [ 70b, 140b, 233b, 100b ], $
  37.     [ 198b, 15b, 24b, 101b ], $
  38.     [ 70b, 12b, 8b, 101b ], $
  39.     [ 38b, 152b, 9b, 101b ], $
  40.     [ 38b, 152b, 9b, 101b ], $
  41.     [ 38b, 24b, 24b, 101b ], $
  42.     [ 118b, 60b, 232b, 100b ], $
  43.     [ 6b, 0b, 0b, 100b ], $
  44.     [ 6b, 0b, 0b, 110b ], $
  45.     [ 6b, 0b, 0b, 96b ], $
  46.     [ 6b, 0b, 0b, 96b ], $
  47.     [ 254b, 255b, 255b, 127b ], $
  48.     [ 254b, 255b, 255b, 127b ], $
  49.     [ 0b, 0b, 0b, 0b ], $
  50.     [ 0b, 0b, 0b, 0b ], $
  51.     [ 0b, 0b, 0b, 0b ], $
  52.     [ 0b, 0b, 0b, 0b ], $
  53.     [ 0b, 0b, 0b, 0b ]  $
  54.   ]
  55. END
  56.  
  57.  
  58. ;
  59. ;  FIELD_Copy
  60. ;   Copy a field widget.  2 copy methods:
  61. ;
  62. ;   if( copy != NULL)       { *copy = *ptr; free(ptr); }
  63. ;   else                    { *(copy = malloc(...)) = *ptr; }
  64. ;
  65. PRO FIELD_Copy, Ptr, Copy
  66.     GenCopy, Ptr, Copy, /HASVALUE
  67. END
  68.  
  69.  
  70. ;
  71. ;  FIELD_Destroy
  72. ;   Release resources for the given field
  73. ;
  74. PRO FIELD_Destroy, Ptr
  75.     GenDestroy, Ptr, /HASVALUE
  76. END
  77.  
  78.  
  79. ;
  80. ;  FIELD_Event
  81. ;   Event handling routine for a field dialog.
  82. ;
  83. PRO FIELD_Event, Event
  84.  
  85.     WIDGET_CONTROL, Event.Id, GET_UVALUE=Ev                 ; Get Event
  86.     WIDGET_CONTROL, Event.Top, GET_UVALUE=Binfo, /NO_COPY   ; Get Dialog Info
  87.     Ptr2Obj, Binfo.ObjPtr, Obj                              ; Get Object
  88.  
  89.     CASE Ev OF
  90.  
  91.     'LITERAL':      BEGIN                   ; UNIMPLEMENTED (IDL v. Literal)
  92.         Obj.ValueType       = 0
  93.         WIDGET_CONTROL, Binfo.EditId, SENSITIVE=0
  94.         END
  95.     'CODEBASED':    BEGIN                   ; UNIMPLEMENTED (IDL v. Literal)
  96.         Obj.ValueType       = 1
  97.         WIDGET_CONTROL, Binfo.EditId, SENSITIVE=1
  98.         END
  99.     'MAINTEXT': WIDGET_CONTROL, Obj.Value1, SET_UVALUE=Event.Value
  100.     'VALUETEXT':Obj.Value2      = Event.Value   ; UNIMPLEMENTED
  101.  
  102.     'TITLE':    Obj.Title       = Event.Value
  103.     'FONT':     Obj.TitleFont   = Event.Value
  104.     'TEXTFONT': Obj.TextFont    = Event.Value
  105.     'NAME':     Obj.Name        = Event.Value   ; Other
  106.     'FRAME':    Obj.FrameSize   = Event.Value
  107.     'UVALUE':   Obj.Uvalue      = Event.Value
  108.     'XSIZE':    Obj.XSize       = Event.Value   ; XY Stuff
  109.     'YSIZE':    Obj.YSize       = Event.Value
  110.  
  111.     'STRING':   Obj.FieldType   = 0
  112.     'FLOAT':    Obj.FieldType   = 1
  113.     'INT':      Obj.FieldType   = 2
  114.     'LONG':     Obj.FieldType   = 3
  115.  
  116.     'NONE':     Obj.FieldEv     = 0
  117.     'CR_EV':    Obj.FieldEv     = 1
  118.     'ALL_EV':   Obj.FieldEv     = 2
  119.     'NOEDIT':   Obj.FieldNoEdit = 1 - Obj.FieldNoEdit
  120.     'ISCOL':    Obj.FieldVertical   = 1 - Obj.FieldVertical
  121.  
  122.     'XFONT':    BEGIN
  123.         WIDGET_CONTROL, /HourGlass
  124.         NewFontName = XFont()
  125.         IF NewFontName NE '' THEN BEGIN
  126.             WIDGET_CONTROL, Binfo.Foci[1], SET_VALUE=NewFontName
  127.             Obj.TitleFont   = NewFontName
  128.         ENDIF
  129.         END
  130.     'XTFONT':   BEGIN
  131.         WIDGET_CONTROL, /HourGlass
  132.         NewFontName = XFont()
  133.         IF NewFontName NE '' THEN BEGIN
  134.             WIDGET_CONTROL, Binfo.Foci[2], SET_VALUE=NewFontName
  135.             Obj.TextFont    = NewFontName
  136.         ENDIF
  137.         END
  138.  
  139.     'DONE':     BEGIN
  140.         Accept, Obj, Binfo.ObjPtr
  141.         WIDGET_CONTROL, Event.Top, SET_UVALUE=Binfo, /NO_COPY
  142.         WIDGET_CONTROL, Event.Top, /DESTROY
  143.         RETURN
  144.         END
  145.  
  146.     'CANCEL':   BEGIN
  147.         Cancel, Obj, Binfo.ObjPtr
  148.         RETURN
  149.         END
  150.     ELSE:           MESSAGE, 'Unprocessed event: ' + Ev
  151.     ENDCASE
  152.  
  153.     Dirty   = 1     ; We've changed something since the last save
  154.  
  155.     SetNextFocus, Binfo, Event      ; Set next keyboard focus as necessary
  156.     Obj2Ptr, Obj, Binfo.ObjPtr      ; Put object back into pointer
  157.     WIDGET_CONTROL, Event.Top, SET_UVALUE=Binfo, /NO_COPY
  158. END
  159.  
  160.  
  161. ;
  162. ;  FIELD_Build
  163. ;   Create a dialog box a field object.  If ptr is nil then
  164. ;   create the object as well.
  165. ;
  166. PRO FIELD_Build, Ptr, ParPtr
  167.   COMMON WidEd_Comm
  168.  
  169.     FIELD_Alloc, ParPtr, Ptr
  170.     MgrName = 'WE_FIELD' + STRTRIM(Ptr, 2)
  171.     IF XRegistered(MgrName) THEN RETURN
  172.  
  173.     Title   = GetId(Ptr) + '(Child of ' + GetId(ParPtr) + ')'
  174.  
  175.     Ptr2Obj, Ptr, Obj
  176.     IF SmallScreen[0] NE 0 THEN BEGIN
  177.         Base    = WIDGET_BASE(/COLUMN, TITLE=Title, GROUP_LEADER=TopDlg, $
  178.                         X_SCROLL_SIZE=SmallScreen[0], $
  179.                         Y_SCROLL_SIZE=SmallScreen[1] )
  180.     ENDIF ELSE BEGIN
  181.         Base    = WIDGET_BASE(/COLUMN, TITLE=Title, GROUP_LEADER=TopDlg)
  182.     ENDELSE
  183.     Foci    = LONARR(8)
  184.  
  185.     Base1   = WIDGET_BASE(Base, /COLUMN, /FRAME)
  186.     ; Lab       = WIDGET_LABEL(Base1, VALUE="Basic Information")
  187.     BuildEdit, Base1, Obj, _EditId, /SINGLE
  188.  
  189.     Foci[0] = Field(Base1, "Title:", Obj.Title, "TITLE", SIZE=50, /STRING)
  190.     Btns    = LONARR(4)
  191.  
  192.     Base2   = WIDGET_BASE(Base1, /ROW)
  193.     Label   = WIDGET_LABEL(Base2, VALUE="Field Type:")
  194.     Base3   = WIDGET_BASE(Base2, /ROW, /EXCLUSIVE)
  195.     Btns[0] = WIDGET_BUTTON(Base3, VALUE='String', UVALUE='STRING')
  196.     Btns[1] = WIDGET_BUTTON(Base3, VALUE='Float', UVALUE='FLOAT')
  197.     Btns[2] = WIDGET_BUTTON(Base3, VALUE='Int', UVALUE='INT')
  198.     Btns[3] = WIDGET_BUTTON(Base3, VALUE='Long', UVALUE='LONG')
  199.     WIDGET_CONTROL, Btns[Obj.FieldType], /SET_BUTTON
  200.  
  201.     Base2   = WIDGET_BASE(Base1, /ROW)
  202.     Label   = WIDGET_LABEL(Base2, VALUE="Field Events:")
  203.     Base3   = WIDGET_BASE(Base2, /ROW, /EXCLUSIVE)
  204.     Btns[0] = WIDGET_BUTTON(Base3, VALUE='None', UVALUE='NONE')
  205.     Btns[1] = WIDGET_BUTTON(Base3, VALUE='Event on <CR>', UVALUE='CR_EV')
  206.     Btns[2] = WIDGET_BUTTON(Base3, VALUE='All Events', UVALUE='ALL_EV')
  207.     WIDGET_CONTROL, Btns[Obj.FieldEv], /SET_BUTTON
  208.  
  209.     Base2   = WIDGET_BASE(Base1, /ROW, /NONEXCLUSIVE)
  210.     Button  = WIDGET_BUTTON(Base2, VALUE='Field Text Fixed', UVALUE='NOEDIT')
  211.     IF Obj.FieldNoEdit THEN WIDGET_CONTROL, Button, /SET_BUTTON
  212.     Button  = WIDGET_BUTTON(Base2, VALUE='Field is Vertical', UVALUE='ISCOL')
  213.     IF Obj.FieldVertical THEN WIDGET_CONTROL, Button, /SET_BUTTON
  214.  
  215.     Base2   = WIDGET_BASE(Base1,/ROW)
  216.     Foci[1] = Field(Base2, "Title Font:", Obj.TitleFont, 'FONT', SIZE=50,/STR)
  217.     IF !Version.OS NE 'Win32' AND !Version.OS NE 'MacOS' THEN $
  218.         XFontBtn    = WIDGET_BUTTON(Base2, VALUE="XFont", UVALUE="XFONT")
  219.  
  220.     Base2   = WIDGET_BASE(Base1,/ROW)
  221.     Foci[2] = Field(Base2, "Text Font:", Obj.TextFont, 'TEXTFONT',SIZE=50,/STR)
  222.     IF !Version.OS NE 'Win32' AND !Version.OS NE 'MacOS' THEN $
  223.         XFontBtn    = WIDGET_BUTTON(Base2, VALUE="XFont", UVALUE="XTFONT")
  224.  
  225.     BuildOther, Base1, Obj, Foci, 3
  226.  
  227.     Base1   = WIDGET_BASE(Base, /FRAME, /COLUMN)
  228.     Lab     = WIDGET_LABEL(Base1, VALUE="Field Appearance Controls")
  229.     BuildXY, Base1, Obj, Foci, 6, /SIZE
  230.     BuildOkCancel, Base, Obj
  231.  
  232.     DlgInfo     = {             $
  233.         Foci:       Foci,       $
  234.         EditId:     _EditId,    $
  235.         ObjPtr:     Ptr         $
  236.     }
  237.     Obj.Dialog  = Base
  238.     WIDGET_CONTROL, Base, SET_UVALUE=DlgInfo, /NO_COPY
  239.     WIDGET_CONTROL, Base, /REALIZE
  240.     XMANAGER, MgrName, Base, EVENT_HANDLER='FIELD_Event', CLEANUP='MISC_Kill'
  241.     Obj2Ptr, Obj, Ptr
  242. END
  243.  
  244.  
  245. ;
  246. ;  FIELD_Save
  247. ;   Save field information to a file.
  248. ;   Store value as well: If value is nil, make up a value.
  249. ;
  250. ;   FORMAT:
  251. ;       <field object>
  252. ;       <number of elements in value>
  253. ;       <value>
  254. ;
  255. PRO FIELD_Save, Unit, Ptr
  256.     GenWrite, Unit, Ptr, DEFAULT=""
  257. END
  258.  
  259.  
  260. ;
  261. ;  FIELD_Restore
  262. ;   Read in a field object from a file
  263. ;
  264. PRO FIELD_Restore, Unit, Parent, Ptr
  265.     MISC_Restore, Unit, Parent, Ptr, "FIELD", 1
  266. END
  267.  
  268.  
  269. ;
  270. ;  FIELD_Generate
  271. ;   Create a field object for previewing
  272. ;
  273. PRO FIELD_Generate, Base, Ptr
  274.   COMMON WidEd_Comm
  275.  
  276.     Ptr2Obj, Ptr, Obj
  277.     Id  = 0L            ; Prevent EXECUTE from creating a new variable
  278.  
  279.     ;   Generate command string
  280.  
  281.     GetValue, Obj, Names, ""
  282.     Cmd = 'Id = CW_FIELD(Base,VALUE=Names'
  283.     IF Obj.FieldVertical THEN Cmd = Cmd + ',/COLUMN'
  284.     IF Obj.FieldNoEdit THEN Cmd = Cmd + ',/NOEDIT'
  285.     IAddCmd, Cmd, Obj.FrameSize, 'FRAME'
  286.     SAddCmd, Cmd, Obj.TitleFont, 'FONT'
  287.     SAddCmd, Cmd, Obj.TextFont, 'FIELDFONT'
  288.     SAddCmd, Cmd, Obj.Title, 'TITLE'
  289.     IAddCmd, Cmd, Obj.XSize, 'XSIZE'
  290.     IAddCmd, Cmd, Obj.YSize, 'YSIZE'
  291.  
  292.     Types   = [ 'STRING', 'FLOAT', 'INTEGER', 'LONG']
  293.     Cmd = Cmd + ',/' + Types[Obj.FieldType]
  294.  
  295.     Obj2Ptr, Obj, Ptr
  296.  
  297.     ; Create field widget
  298.  
  299.     IF EXECUTE(Cmd+')') NE 1 THEN BEGIN
  300.         MESSAGE,'Could not create field ' + VarName[Ptr]
  301.     ENDIF
  302.  
  303. END
  304.  
  305.  
  306. ;
  307. ;  FIELD_GenWid
  308. ;   Create IDL code for creating a field widget
  309. ;
  310. PRO FIELD_GenWid, Unit, Ptr, Parent
  311.  
  312.     Name    = VarId(Ptr)                        ; Get variable name of object
  313.     Ptr2Obj, Ptr, Obj                           ; Get object info
  314.  
  315.     FieldName   = 'FieldVal' + STRTRIM(Ptr,2)   ; Create value name
  316.     SaveStr, Unit, Ptr, Obj, FieldName, ""      ; Generate value code
  317.  
  318.     XPRINTF, Unit, FORMAT='("  ",A," = CW_FIELD( ",A,",VALUE=",A)', $
  319.         Name, Parent, FieldName, /NO_EOL
  320.     IF Obj.FieldVertical THEN ISaveCmd, Unit, 1, "COLUMN" $
  321.     ELSE ISaveCmd, Unit, 1, "ROW"
  322.  
  323.     Types   = [ 'STRING', 'FLOAT', 'INTEGER', 'LONG']
  324.     ISaveCmd, Unit, 1, Types[Obj.FieldType]
  325.  
  326.     IF Obj.FieldEv EQ 1 THEN ISaveCmd, Unit, 1, "RETURN_EVENTS"
  327.     IF Obj.FieldEv EQ 2 THEN ISaveCmd, Unit, 1, "ALL_EVENTS"
  328.  
  329.     SSaveCmd, Unit, Obj.TextFont, "FIELDFONT"
  330.     SSaveCmd, Unit, Obj.TitleFont, "FONT"
  331.     ISaveCmd, Unit, Obj.FrameSize, "FRAME"
  332.     SSaveCmd, Unit, Obj.Title, "TITLE"
  333.     SSaveCmd, Unit, UValue(Obj, Ptr), "UVALUE"
  334.     ISaveCmd, Unit, Obj.XSize, "XSIZE"
  335.     ISaveCmd, Unit, Obj.YSize, "YSIZE"
  336.     XPRINTF, Unit, ')'
  337.  
  338.     Obj2Ptr, Obj, Ptr
  339. END
  340.  
  341.  
  342. ;
  343. ;  FIELD_Alloc
  344. ;       Allocate a field object.  Don't allocate if ptr is non-nil
  345. ;
  346. PRO FIELD_Alloc, Parent, Ptr
  347.   COMMON WidEd_Comm
  348.  
  349.     IF KEYWORD_SET(Ptr) NE 0 THEN RETURN    ; if(ptr != NULL) return;
  350.  
  351.     Ptr     = WIDGET_BASE(GROUP=TopDlg)     ; Make a pointer
  352.     ValueId = WIDGET_BASE(GROUP=TopDlg)
  353.  
  354.     Obj     = {                 $
  355.         WE_FIELD,               $
  356.         Type:           'FIELD',$
  357.         Parent:         Parent, $ ; Pointer to parent
  358.         Id:             NewId(),$ ; Permanent Id
  359.         Dialog:         0L,     $ ; Save Dialog ID (need for Cut consistency)
  360.         Next:           0L,     $ ; index of next child/free/top
  361.         Name:           '',     $ ; Title or object name
  362.         Title:          '',     $
  363.         FrameSize:      0,      $
  364.         TitleFont:      '',     $
  365.         TextFont:       '',     $
  366.         UValue:         '',     $
  367.         Value1:         ValueId,$
  368.         Value2:         '',     $ ; UNIMPLEMENTED and unused
  369.         ValueType:      0,      $ ; UNIMPLEMENTED and unused
  370.         XSize:          0,      $
  371.         YSize:          0,      $
  372.         FieldType:      0,      $ ; Enum { String,Float,Int,Long }
  373.         FieldEv:        0,      $ ; Enum { None,<CR>,All }
  374.         FieldNoEdit:    0,      $ ; Set if CANT edit field
  375.         FieldVertical:  0       $ ; Enum { Row,Column }
  376.     }
  377.     Obj2Ptr, Obj, Ptr
  378. END
  379.